Cypress.on("uncaught:exception", () => {
  return false;
});

describe("操控端", () => {
  beforeEach(() => {
    const username = "admin";
    const password = "123456";
    cy.login(username, password);
    cy.visit("/inspection/control-home");
    // 进入机器人操控端
    cy.getByData("inspection-robot-item").rightclick();
    cy.contains("进入操控端").click();
  });

  context("视频监控", () => {
    it("查看机器人状态数据", () => {
      // 接口拦截
      cy.intercept(
        { method: "GET", url: "/api/robot-inspection-log/v1/*" },
        {
          statusCode: 200,
          body: {
            code: 200,
            message: "操作成功",
            data: {
              wheelStatus: 1,
              battery: 31.2,
              robotid: "OI202210264243",
            },
          },
          headers: { "access-control-allow-origin": "*" },
        }
      ).as("getRobotInspectionLog");
      // 切换到视频监控组件
      cy.contains("视频监控").click();
      // 判断接口返回数据
      cy.contains("机器人编号")
        .next("div")
        .contains("OI202210264243")
        .should("exist");
    });
  });

  context("任务管理", () => {
    it("添加巡检任务", () => {
      cy.contains("添加任务模板").click();
      cy.contains("label", "任务名称")
        .parent()
        .find("input")
        .type("巡检任务测试");
      cy.contains("巡检任务").click();
      cy.contains("label", "任务地图").parent().find("input").click();
      cy.get('[aria-hidden="false"]').last().find("ul > li").first().click();
      cy.contains("label", "任务路径").parent().find("input").click();
      cy.get('[aria-hidden="false"]').last().find("ul > li").first().click();
      cy.contains("label", "任务次数").parent().find("input").type("1");
      cy.get('[placeholder="开始时间"]').type("2099-01-01 00:00:00");
      cy.get('[placeholder="结束时间"]').type("2099-01-01 23:59:59");
      cy.contains("任务时间").click();
      cy.contains("label", "激活条件").parent().find("input").click();
      cy.get('[aria-hidden="false"]').last().find("ul > li").first().click();
      cy.contains("确认").click();
      cy.get('[aria-label="警告"]').find("button").contains("确认").click();
      cy.contains("操作成功").should("exist");
    });

    it("添加广播任务", () => {
      cy.contains("添加任务模板").click();
      cy.contains("label", "任务名称")
        .parent()
        .find("input")
        .type("广播任务测试");
      cy.contains("广播任务").click();
      cy.contains("label", "广播音频").parent().find("input").click();
      cy.get(".el-scrollbar__view").find("span").contains("哔卟哔卟").click();
      cy.contains("label", "任务次数").parent().find("input").type("1");
      cy.get('[placeholder="开始时间"]').type("2099-01-01 00:00:00");
      cy.get('[placeholder="结束时间"]').type("2099-01-01 23:59:59");
      cy.contains("任务时间").click();
      cy.contains("label", "激活条件").parent().find("input").click();
      cy.get(".el-scrollbar__view").find("span").contains("单次").click();
      cy.contains("确认").click();
      cy.get('[aria-label="警告"]').find("button").contains("确认").click();
      cy.contains("操作成功").should("exist");
    });

    it("删除巡检任务", () => {
      cy.contains("巡检任务测试").parent().parent().contains("删除").click();
      cy.get('[aria-label="警告"]').find("button").contains("确认").click();
      cy.contains("操作成功").should("exist");
    });

    it("删除广播任务", () => {
      cy.contains("广播任务测试").parent().parent().contains("删除").click();
      cy.get('[aria-label="警告"]').find("button").contains("确认").click();
      cy.contains("操作成功").should("exist");
    });
  });

  context("环境监测", () => {
    it("查看环境监测数据", () => {
      // 接口拦截
      cy.intercept(
        { method: "GET", url: "/api/robot-inspection-log/v1/*" },
        {
          statusCode: 200,
          body: {
            code: 200,
            message: "操作成功",
            data: {
              temperature: 1,
              humidity: 1,
              pmTF: 1,
              pmTen: 1,
              noise: 1,
              fireMax: 1,
            },
          },
          headers: { "access-control-allow-origin": "*" },
        }
      ).as("getRobotInspectionLog");
      // 切换到环境监测组件
      cy.contains("环境监测").click();
      // 判断接口返回数据
      cy.wait("@getRobotInspectionLog");
      cy.contains("温度")
        .parent()
        .siblings()
        .children()
        .first()
        .should("have.text", "1°C");
    });

    it("设置阈值", () => {
      // 切换到视频监控组件
      cy.contains("环境监测").click();
      cy.contains("设置阈值").click();
      // 输入阈值
      cy.get(".el-popover").get("input").eq(0).clear().type(50);
      cy.get(".el-popover").find("button").eq(0).click();
      cy.contains("操作成功").should("exist");
    });
  });

  context("异常日志", () => {
    it("查看异常日志数据", () => {
      // 接口拦截
      cy.intercept(
        { method: "GET", url: "/api/robot-abnormal-log/v1/getByRidAndType*" },
        {
          statusCode: 200,
          body: {
            code: 200,
            message: "操作成功",
            data: [
              {
                rid: "OI202210264243",
                message: "PM2.5预警",
                createTime: "2023-02-14T10:01:38",
                status: "0",
              },
              {
                rid: "OI202210264243",
                message: "PM2.5预警",
                createTime: "2023-02-14T10:01:38",
                status: "0",
              },
            ],
          },
          headers: { "access-control-allow-origin": "*" },
        }
      ).as("getAbnormalLog");
      // 切换到异常日志组件
      cy.contains("异常日志").click();
      // 判断接口返回数据
      cy.wait("@getAbnormalLog")
        .its("response.body.data")
        .should("have.length", 2);
    });

    it("页面显示", () => {
      const tableCol = [
        "机器人编码",
        "警报内容",
        "警报时间",
        "处理进度",
        "操作",
      ];
      // 切换到异常日志组件
      cy.contains("异常日志").click();
      cy.get("table > thead > tr > th").should("have.length", 5);
      for (let i = 0; i < 5; i++) {
        cy.get(
          "table > thead > tr > th:nth-child(" + (i + 1) + ") > div"
        ).contains(tableCol[i]);
      }
    });
  });

  context("车牌识别", () => {
    it("页面显示", () => {
      const tableCol = ["编号", "车牌号码", "记录时间"];
      // 切换到车牌识别组件
      cy.contains("车牌识别").click();
      cy.get("table > thead > tr > th").should("have.length", 3);
      for (let i = 0; i < 3; i++) {
        cy.get(
          "table > thead > tr > th:nth-child(" + (i + 1) + ") > div"
        ).contains(tableCol[i]);
      }
    });

    it("手动录入车牌", () => {
      // 切换到车牌识别组件
      cy.contains("车牌识别").click();
      cy.contains("手动录入").click();
      cy.contains("label", "车牌号").parent().find("input").type("粤A99999");
      cy.contains("保存").click();
      cy.contains("车牌已存在").should("exist");
    });
  });

  context("其他设置", () => {
    it("开/关声光报警器", () => {
      cy.intercept("GET", "/api/robot-inspection-log/v1/*").as(
        "getRobotInspectionLog"
      );
      // 切换到其他设置组件
      cy.contains("其他设置").click();
      cy.wait("@getRobotInspectionLog");
      cy.contains("声光报警器").siblings().click();
      cy.contains("下发成功").should("exist");
      cy.contains("声光报警器").siblings().click();
      cy.contains("下发成功").should("exist");
    });

    it("调节声光报警器音量", () => {
      cy.intercept("GET", "/api/robot-inspection-log/v1/*").as(
        "getRobotInspectionLog"
      );
      // 切换到其他设置组件
      cy.contains("其他设置").click();
      cy.wait("@getRobotInspectionLog");
      cy.contains("声光报警器音量")
        .siblings()
        .find(".el-slider__runway")
        .trigger("mousedown", 0, 0, { force: true })
        .trigger("mousemove", 100, 0)
        .trigger("mouseup");
    });

    it("自动大灯开关", () => {
      cy.intercept("GET", "/api/robot-inspection-log/v1/*").as(
        "getRobotInspectionLog"
      );
      // 切换到其他设置组件
      cy.contains("其他设置").click();
      cy.wait("@getRobotInspectionLog");
      cy.contains("自动大灯开关").siblings().click();
      cy.contains("下发成功").should("exist");
      cy.contains("自动大灯开关").siblings().click();
      cy.contains("下发成功").should("exist");
    });
  });
});
